package com.xiaobao.service.impl;

import com.xiaobao.mapper.TodayPlanMapper;
import com.xiaobao.pojo.TodayPlan;
import com.xiaobao.service.TodayPlanService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.text.SimpleDateFormat;
import java.util.Date;

@Service
public class TodayPlanServiceImpl implements TodayPlanService {
    private final TodayPlanMapper todayPlanMapper;

    public TodayPlanServiceImpl(TodayPlanMapper todayPlanMapper) {
        this.todayPlanMapper = todayPlanMapper;
    }

    /**
     * 获取用户今天的计划
     * 该方法使用了事务管理，确保数据的一致性
     *
     * @param userid 用户ID，用于查询特定用户的计划
     * @return TodayPlan数组，包含用户今天的计划信息
     */
    @Override
    //@Transactional
    public TodayPlan[] getTodayPlan(String userid) {
        // 获取当前时间，格式化为年-月-日，用于查询今天的数据
        String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        // 调用todayPlanMapper的getTodayPlan方法，传入用户ID和当前时间，获取今天的计划信息
        return todayPlanMapper.getTodayPlan(userid, time);
    }

    /**
     * 添加今日计划
     *
     * @param todayPlan 今日计划对象，包含要添加的计划信息
     * @return 返回添加计划的结果，true表示成功，false表示失败
     * 本方法主要用于向系统中添加一个新的今日计划对象它首先获取当前的日期，
     * 然后将这个日期设置为计划的日期，同时初始化计划的状态最后，调用Mapper层的
     * addTodayPlan方法将计划对象插入到数据库中
     */
    @Override
    public boolean addTodayPlan(TodayPlan todayPlan) {
        // 获取当前时间并格式化为"年-月-日"的形式，用作计划的日期
        String time = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        todayPlan.setDate(time);
        // 初始化计划的状态为0，表示计划尚未完成
        todayPlan.setStatus(0);
        // 调用Mapper层的方法，将计划对象添加到数据库中，并返回添加结果
        return todayPlanMapper.addTodayPlan(todayPlan);
    }

    /**
     * 修改今天的计划
     * 该方法用于更新数据库中的今天计划记录
     *
     * @param todayPlan 今天计划对象，包含了需要更新的计划信息
     * @return 返回更新操作是否成功true表示成功，false表示失败
     */
    @Override
    public boolean updateTodayPlan(TodayPlan todayPlan) {
        return todayPlanMapper.updateTodayPlan(todayPlan);
    }

    /**
     * 删除今天的计划
     * 此方法用于删除给定的今天计划对象它通过调用todayPlanMapper中的deleteTodayPlan方法来实现
     *
     * @param todayPlan 今天计划对象，包含要删除的计划的信息
     * @return 删除操作的结果，如果删除成功则返回true，否则返回false
     */
    @Override
    public boolean deleteTodayPlan(TodayPlan todayPlan) {
        return todayPlanMapper.deleteTodayPlan(todayPlan);
    }
}
